﻿using System;
namespace Physics
{
    /// <summary>
    /// Interfejs dla obiektu, który wykrywa zderzenia
    /// </summary>
    public interface ICollisionDetector
    {
        /// <summary>
        /// Dodaje obiekt do sprawdzania
        /// </summary>
        /// <param name="obj">Obiekt fizyczny</param>
        void AddObject(Physics.IPhysicalObject obj);
        /// <summary>
        /// Zdarzenie wywoływane, gdy zajdzie zderzenie
        /// </summary>
        event Physics.CollisionHandler OnCollision;
        /// <summary>
        /// Zdarzenie wywoływane, gdy zajdzie potencjalne zderzenie(wczesna filtracja)
        /// </summary>
        event Physics.CollisionHandler OnPossibleCollision;
        /// <summary>
        /// Analizuje ruchy obiektów w jakimś przedziale czasu i rozwiązuje zderzenia
        /// </summary>
        /// <param name="frameTime">Przedział czasu do analizy</param>
        void ProcessFrame(float frameTime);
        /// <summary>
        /// Usuwa obiekt z listy do sprawdzania
        /// </summary>
        /// <param name="obj">Obiekt fizyczny</param>
        void RemoveObject(Physics.IPhysicalObject obj);
    }
}
